/**
 * @author wn
 * @date 2023/03/06 11:13:59
 * @description: 处理 router 相关的 工具类
 * 1 生成首页路由
 * 2 生成嵌套路由（子路由） -- 递归 所有子路由
 */

import { isURL } from '@/utils/validate'

// for URL-eval
window._CONFIG['domianURL'] = import.meta.env.VITE_APP_API_BASE_URL

// vite 动态 组件导入  使用 Glob 导入
const viewsModules = import.meta.glob('@/views/**/*.vue')
const componentsModules = import.meta.glob('@/components/**/*.vue')
// 生成首页路由
export const generateIndexRouter = menuData => {
	const indexRouter = [
		{
			path: '/',
			name: 'dashboard',
			component: componentsModules['/src/components/layouts/TabLayout.vue'],
			meta: { title: '首页' },
			redirect: '/dashboard/analysis',
			children: [...generateChildRouters(menuData)],
		},
		{
			path: '/:pathMatch(.*)*',
			redirect: '/404',
			hidden: true,
		},
	]
	return indexRouter
}

// 生成嵌套路由（子路由） -- 递归 所有子路由
const generateChildRouters = data => {
	const routers = []
	for (let item of data) {
		let component
		if (item.component.indexOf('layouts') >= 0) {
			component = componentsModules[`/src/components/${item.component}.vue`]
		} else {
			component = viewsModules[`/src/views/${item.component}.vue`]
		}
		/**
		 * 根节点 后台定义 component: "layouts/RouteView"
		 * 可以生成 menu  但是 页面没有创建好的话 路由没有对应 component--undefined
		 */

		// eslint-disable-next-line
		const URL = (item.meta.url || '').replace(/{{([^}}]+)?}}/g, (s1, s2) =>
			eval(s2)
		) // URL支持{{ window.xxx }}占位符变量
		if (isURL(URL)) {
			item.meta.url = URL
		}
		const menu = {
			path: item.path,
			name: item.name,
			redirect: item.redirect,
			component,
			hidden: item.hidden,
			meta: {
				title: item.meta.title,
				// 图标应该 用and T 最新的图标
				icon: item.meta.icon,
				url: item.meta.url,
				permissionList: item.meta.permissionList,
				keepAlive: item.meta.keepAlive,
				internalOrExternal: item.meta.internalOrExternal,
				componentName: item.meta.componentName,
			},
		}
		if (item.alwaysShow) {
			menu.alwaysShow = true
			menu.redirect = menu.path
		}

		// 递归 所有子路由
		if (item.children && item.children.length > 0) {
			menu.children = [...generateChildRouters(item.children)]
		}

		//--update-begin----author:scott---date:20190320------for:根据后台菜单配置，判断是否路由菜单字段，动态选择是否生成路由（为了支持参数URL菜单）------
		//判断是否生成路由
		if (item.route && item.route === '0') {
			//console.log(' 不生成路由 item.route：  '+item.route);
			//console.log(' 不生成路由 item.path：  '+item.path);
		} else {
			routers.push(menu)
		}
		//--update-end----author:scott---date:20190320------for:根据后台菜单配置，判断是否路由菜单字段，动态选择是否生成路由（为了支持参数URL菜单）------
	}
	return routers
}
